# 数字信封项目 Makefile

# 目录结构
SRC_DIR = src
INC_DIR = include
OBJ_DIR = obj

# 编译器设置
CC = gcc
CFLAGS = -Wall -O2 -I$(INC_DIR) -I/usr/local/gmssl/include

# 链接器设置
LDFLAGS = -L/usr/local/gmssl/lib -lgmssl -lcrypto

# 目标可执行文件
TARGET = digital_envelope

# 源文件和对象文件
SRCS = $(wildcard $(SRC_DIR)/*.c) main.c
OBJS = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.c)) $(OBJ_DIR)/main.o

# 默认目标
all: init $(TARGET)

# 初始化目录结构
init:
	@mkdir -p $(SRC_DIR) $(INC_DIR) $(OBJ_DIR)

# 链接规则
$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 编译规则 - src目录下的文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) $(CFLAGS) -c $< -o $@

# 编译规则 - 根目录下的main.c
$(OBJ_DIR)/main.o: main.c
	$(CC) $(CFLAGS) -c $< -o $@

# 清理规则
clean:
	rm -f $(TARGET) $(OBJ_DIR)/*.o 2>/dev/null || del /Q $(TARGET).exe $(OBJ_DIR)\*.o

# 运行程序
run: $(TARGET)
	.\$(TARGET)

# 移动文件到新的目录结构
restructure:
	@echo "重组项目结构..."
	@mkdir -p $(SRC_DIR) $(INC_DIR) $(OBJ_DIR)
	@move *.h $(INC_DIR)\ >nul 2>&1
	@move sm*.c $(SRC_DIR)\ >nul 2>&1
	@echo "项目结构重组完成！"

# 添加头文件检查
check-headers:
	@echo "检查 GmSSL 头文件..."
	@dir /usr/local/gmssl/include/gmssl/

.PHONY: all clean run init restructure check-headers